﻿using _2048.Properties;
using Common;
using System;
using System.Windows.Forms;

namespace _2048 {
    // 主窗口
    public partial class MainWindow: Form, Game.Callback {
        private readonly Game mGame;    // 游戏

        /**
         * 构造方法。
         */
        public MainWindow() {
            // 初始化控件
            this.InitializeComponent();

            // 创建游戏区域
            GameBoard gameBoard = new GameBoard(Controls, Const.GAME_BOARD_X, Const.GAME_BOARD_Y, Const.GAME_BOARD_WIDTH, Const.GAME_BOARD_HEIGHT);

            // 创建游戏
            mGame = new Game(this, gameBoard.Drawer, gameBoard);
        }

        /**
         * "开始"按钮的单击响应方法。
         * @param sender    事件发送者
         * @param e         事件相关信息
         */
        private void ButtonStart_Click(object sender, EventArgs e) {
            ButtonStart.Text = Resources.IDS_RESTART;
            mGame.Start();
        }

        /**
         * 游戏结束事件的响应方法。
         * @param isWon 胜利则为 true，否则为 false
         */
        public void OnGameOver(bool isWon) {
            if (isWon) {
                MessageBox.Show(Resources.IDS_WON, " ", MessageBoxButtons.OK, MessageBoxIcon.Information);
            } else {
                MessageBox.Show(Resources.IDS_LOST, " ", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            ButtonStart.Text = Resources.IDS_START;
        }

        /**
         * 按键事件的响应方法。
         * @param msg   事件
         * @param key   按键
         * @return 事件在此被处理则返回 true ，否则返回 false
         */
        protected override bool ProcessCmdKey(ref Message msg, Keys key) {
            return mGame.OnKeyPressed(key);
        }
    }
}
